# -*- encoding: utf-8 -*-

"""
------------------------------------------
@File       : coroutine_base.py
@Author     : maixiaochai
@Email      : maixiaochai@outlook.com
@CreatedOn  : 2021/9/16 11:00
------------------------------------------
    协程基础版
"""
from asyncio import get_event_loop


async def add(x):
    print("in sync func add")
    return x + 2


def main():
    """
        add 函数并不会像普通函数一样返回结果，而是返回一个coroutine对象
        协程函数要想执行需要放到事件循环里执行

        Eventloop 是 asyncio 应用的核心,把一些异步函数注册到这个事件循环上，事件循环会循环执行这些函数。
        当执行到某个函数时，如果它正在等待 I/O 返回，如它正在进行网络请求，或者 sleep 操作，事件循环会暂停它的执行去执行其他的函数；
        当某个函数完成 I/O 后会恢复，下次循环到它的时候继续执行。因此，这些异步函数可以协同 (Cooperative) 运行：这就是事件循环的目标。
    """
    loop = get_event_loop()
    result = loop.run_until_complete(add(2))

    print(result)


if __name__ == '__main__':
    main()
